<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  
</body>
</html>

<script>
// 作用域：

// 函数执行的时候，将 实参 赋值给 对应 位置的 形参
  // 若 对应位置的 形参，获得不到 实参的 赋值，其形参的值为 undefined。

var sample = '&';
var firework2 = function(sample) {
  console.log('firework2 - up', sample);
  sample = '111';
  console.log('firework2 - down', sample);
}

firework2();

console.log('sample', sample);

// JS 两种作用域：
  // 1）函数作用域 - 声明函数的 花括号  内部的 所有代码 形成的
  // 2）全局作用域 - <script> 内所有的代码形成的

// 全局作用域 和 函数作用域的关系： 
  // 以 firework2 举例：其的函数作用域，包含在了 全局作用域当中。

// 作用域的作用：
  // 为了 确定 变量 的关系(指向) - 即 我这个变量，拿到谁的值。
  // 举例：若在函数作用域中有一个变量 sample, 为了确定 sample 的值是什么
    // 1. JS 先在 函数内 寻找 是否 有 sample 的变量声明/形参
    // 2. 若 1）无，JS 再往上到全局作用域 寻找 全局作用域 是否 有 sample 的声明
    // 3. 若 2）无，报错: - num is not defined


// 明确：函数作用域中 能 拿到 全局作用域的 变量。

// 问题：全局作用域 能 拿到 函数作用域 的变量吗？
    // 答：全局作用域  拿不到  函数作用域 的变量。

// 总结：全局作用域中 有 函数作用域，函数作用域 其变量 若没被 声明/形参，即函数作用域 的变量值的确定，会往外层作用域寻找
    // 这种机制，可以叫做在「作用域链」上确定 变量的 值。
        // 即 函数作用域 和 全局作用域 形成了 「作用域链」。

    // 作用域链上，变量的确定，只能 内部作用域 获取 外部作用域的变量；反之，不行。


// 思考题：函数内部 能声明函数吗？



</script>